// 220104 2043

/*
Stream 是一个抽象接口
Stream 有四种流类型：
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被入数据，然后读出结果。

所有的 Stream 对象都是 EventEmitter 的实例.
常用的事件有：
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。

*/

// 程序1：从流中读取数据

var fs = require('fs');
var data = '';

// 创建可读流
// 注意，执行node命令的目录的相对位置，需要更上级文件夹
var readerStream = fs.createReadStream('22M01/file/input01042245.txt');

// 设置编码
readerStream.setEncoding('UTF8');

// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
	data += chunk;
});

readerStream.on('end', function() {
	console.log('end event: data=' + data);
});

readerStream.on('error', function(err) {
	console.log(err.stack);
});

console.log('END.42');

// 程序2：写入流
// streamWrite.js

// 程序3：管道流
// 大文件的复制过程？
// streamPipe.js

// 程序4：链式流
// 链式是通过连接输出流到另外一个流并创建多个流操作链的机制。
// 链式流一般用于管道操作。
// streamZip.js

// 追加
// streamAppend.js

// fs 模块的 appendFile函数
// fsAppendFile.js
